package com.internetCafes.spms.web.toolbox.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.internetCafes.spms.common.utils.entity.page.PageItemDTO;
import com.internetCafes.spms.common.utils.entity.page.PageItemVO;
import com.internetCafes.spms.web.certificate.entity.CertificateInfo;
import com.internetCafes.spms.web.customer.model.customer.quali.QualiMatchRes;
import com.internetCafes.spms.web.sys.entity.dto.qualiconf.QualiConfigConfigDto;
import com.internetCafes.spms.web.sys.entity.dto.qualiconf.QualiPageDto;
import com.internetCafes.spms.web.sys.entity.vo.qualiconf.QualiConfVo;
import com.internetCafes.spms.web.sys.entity.vo.qualiconf.QualiListVo;
import com.internetCafes.spms.web.sys.entity.vo.qualiconf.QualiPageVo;
import com.internetCafes.spms.web.sys.model.ConfInfo;
import com.internetCafes.spms.web.toolbox.entity.QualiConf;
import com.internetCafes.spms.web.toolbox.entity.po.QualiCertCondPo;
import com.internetCafes.spms.web.toolbox.entity.po.QualiConfPo;
import com.internetCafes.spms.web.toolbox.entity.vo.quali.SingQualiMatchVo;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 资质信息配置 服务类
 * </p>
 *
 * @author Zj
 * @since 2021-06-13
 */
public interface IQualiConfService extends IService<QualiConf> {

    /**
     * 资质列表
     */
    List<QualiConfPo> qualiConfPoList();

    /**
     * 获取资质列表用于企业资质匹配
     */
    Map<String, QualiMatchRes> qualiMatchMap();

    /**
     * 资质全部匹配并进行分页
     */
    PageItemVO<QualiPageVo> matchAllAndPage(PageItemDTO<QualiPageDto> dto);

    /**
     * 匹配配置的资质信息
     * <p>
     * certId 资质证书id
     */
    List<SingQualiMatchVo> matchCond(Long certId);

    /**
     * 一件匹配一种类型的资质
     */
    List<SingQualiMatchVo> batchQualiMatch(Integer typeTag);

    /**
     * @param qualiConfId 资质条件id
     */
    SingQualiMatchVo singQualiMatch(Long qualiConfId);

    /**
     * 单条资质匹配
     *
     * @param certList
     * @param allHandlerCerts
     * @return
     */
    SingQualiMatchVo singQualiMatchVo(QualiConf qualiConf, List<QualiCertCondPo> certList, List<CertificateInfo> allHandlerCerts, Map<String, List<ConfInfo>> certTypeGroup, Map<String, Map<String, List<ConfInfo>>> professionGroup);

    /**
     * 资质查询列表
     *
     * @param dto 请求参数
     * @return 结果
     */
    PageItemVO<QualiPageVo> page(PageItemDTO<QualiPageDto> dto);

    /**
     * 资质列表
     *
     * @return 结果
     */
    List<QualiListVo> qualiList();

    /**
     * 删除资质信息
     *
     * @param id 资质id
     */
    void delete(Long id);

    /**
     * 自制配置编辑
     *
     * @param dto 请求参数
     */
    void edit(QualiConfigConfigDto dto);

    /**
     * 获取资质编辑信息
     *
     * @param id 资质id
     * @return 结果
     */
    QualiConfVo toEdit(Long id);

    /**
     * 资质新增
     *
     * @param dto 请求参数
     */
    void add(QualiConfigConfigDto dto);
}
